﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ViewRidgeAssistant
{
    class ReportGenerator
    {
        ArrayList _rep;
        string _s_rep;
        string _rep_type;
        string _rep_template;
        data_source _data_module;
        int _id;

        public ReportGenerator(data_source data_module, string rep_type, int id)
        {
            this._rep = new ArrayList();
            this._rep_type = rep_type;
            this._data_module = data_module;
            this._id = id;
            switch (this._rep_type)
            {
                case "MOST_SALES_ARTISTS":
                    this.generateMostSalesArtists();
                    break;
                case "CUSTOMER_INFO":
                    this.generateInfoAboutCustomer(this._id);
                    break;
                case "ARTIST_INFO":
                    this.generateInfoAboutArtist(this._id);
                    break;
                case "WORKS_IN_GALLERY":
                    this.generateListOfWorksInGallery();
                    break;
                default:
                    break;
            }
        }

        public void generateMostSalesArtists()
        {
            
        }

        //генерация отчета о клиенте
        public void generateInfoAboutCustomer(int id)
        {
            class_customer customer = this._data_module.get_customer(id);
            ArrayList interests = this._data_module.get_interests_list(id);
            this._rep.Clear();
            if (customer.result == "OK")
            {
                //Всякая всячина для стиля
                //MessageBox.Show("Генерируем!");
                this._rep.Add("<html><head>\n");

                this._rep.Add("<style type=\"text/css\">");
                this._rep.Add("a { font-family: Verdana, Arial; font-size: 12; font-weight: normal; color: #1A6375; }\n");
                this._rep.Add("a.select { font-family: Verdana, Arial; font-size: 12; font-weight: normal; color: #808080; }\n");
                this._rep.Add(".menu { font-family: Verdana, Arial; font-size: 12; font-weight: normal; color: #303030; }\n");
                this._rep.Add(".selectedmenu { font-family: Verdana, Arial; font-size: 12; font-weight: normal; color: #D02020; }\n");
                this._rep.Add("td { font-family: Verdana, Arial; font-size: 12; font-weight: normal; color: #303030; }\n");
                this._rep.Add("td.light { font-family: Verdana, Arial; font-size: 12; font-weight: normal; color: #303030; }\n");
                this._rep.Add("html,body{ height:100%; margin:0px; padding:0px; background-color: #FFFFFF; }\n");
                this._rep.Add("</style>");

                this._rep.Add("</head>");
                this._rep.Add("<body>\n");

                this._rep.Add("<br>");

                //Имя и ID-шник

                this._rep.Add("<table align=\"center\" border=\"1\" cellpadding=\"3\" cellspacing=\"1\" bordercolor=\"lightgray\" width=\"500\">\n");

                this._rep.Add("<tr><td colspan=\"2\" bgcolor=\"lightgray\">\n");
                this._rep.Add("<div align=\"center\"><b>" + customer.name + "</b></div>\n");
                this._rep.Add("</td></tr>\n");

                this._rep.Add("<tr>\n");
                this._rep.Add("<td width=\"200\"><b>ID:</b></td><td>" + customer.customer_id + "</td>\n");
                this._rep.Add("</tr>\n");

                this._rep.Add("<tr>\n");
                this._rep.Add("<td width=\"200\"><b>Имя:</b></td><td>" + customer.name + "</td>\n");
                this._rep.Add("</tr>\n");

                this._rep.Add("</table>");
                this._rep.Add("<br>");

                //Адресные данные
                //MessageBox.Show("Генерация адресных данных...");

                this._rep.Add("<table align=\"center\" border=\"1\" cellpadding=\"3\" cellspacing=\"1\" bordercolor=\"lightgray\" width=\"500\">\n");

                this._rep.Add("<tr><td colspan=\"2\" bgcolor=\"lightgray\">\n");
                this._rep.Add("<div align=\"center\">" + "<b>Адрес</b>" + "</div>\n");
                this._rep.Add("</td></tr>\n");

                this._rep.Add("<tr>\n");
                this._rep.Add("<td width=\"200\"><b>Страна:</b></td><td>" + customer.country + "</td>\n");
                this._rep.Add("</tr>\n");

                this._rep.Add("<tr>\n");
                this._rep.Add("<td width=\"200\"><b>Регион:</b></td><td>" + customer.state + "</td>\n");
                this._rep.Add("</tr>\n");
                
                this._rep.Add("<tr>\n");
                this._rep.Add("<td width=\"200\"><b>Почтовый индекс:</b></td><td>" + customer.zip_postal_code + "</td>\n");
                this._rep.Add("</tr>\n");
 
                this._rep.Add("<tr>\n");
                this._rep.Add("<td width=\"200\"><b>Город:</b></td><td>" + customer.city + "</td>\n");
                this._rep.Add("</tr>\n");

                this._rep.Add("<tr>\n");
                this._rep.Add("<td width=\"200\"><b>Улица/дом:</b></td><td>" + customer.street + "/" + customer.local_number + "</td>\n");
                this._rep.Add("</tr>\n");

                this._rep.Add("</table>");
                this._rep.Add("<br>");

                //Контакты
                //MessageBox.Show("Генерация контактов...");
                this._rep.Add("<table align=\"center\" border=\"1\" cellpadding=\"3\" cellspacing=\"1\" bordercolor=\"lightgray\" width=\"500\">\n");

                this._rep.Add("<tr><td colspan=\"2\" bgcolor=\"lightgray\">\n");
                this._rep.Add("<div align=\"center\">" + "<b>Контакты</b>" + "</div>\n");
                this._rep.Add("</td></tr>\n");

                this._rep.Add("<tr>\n");
                this._rep.Add("<td width=\"200\"><b>Телефон:</b></td><td>" + customer.phone_number + "</td>\n");
                this._rep.Add("</tr>\n");

                this._rep.Add("<tr>\n");
                this._rep.Add("<td width=\"200\"><b>Эл. почта:</b></td><td>" + customer.email + "</td>\n");
                this._rep.Add("</tr>\n");

                this._rep.Add("</table>");
                this._rep.Add("<br>");

                //Интересы
                //MessageBox.Show("Генерация интересов...");
                this._rep.Add("<table align=\"center\" border=\"1\" cellpadding=\"3\" cellspacing=\"1\" bordercolor=\"lightgray\" width=\"500\">\n");

                this._rep.Add("<tr><td colspan=\"2\" bgcolor=\"lightgray\">\n");
                this._rep.Add("<div align=\"center\">" + "<b>Интересы</b>" + "</div>\n");
                this._rep.Add("</td></tr>\n");

                foreach (string interest in interests)
                {
                    this._rep.Add("<tr><td colspan=\"2\"><div align=\"center\">" + interest + "</div></td></tr>\n");
                }

                this._rep.Add("</table>");
                this._rep.Add("<br>");

                //Купленные картины
                //MessageBox.Show("Генерация купленных картин");

                this._rep.Add("</body>\n");
                this._rep.Add("</html>\n");

                this.view_report();
            }
            else
            {
                MessageBox.Show("Ошибка при получении информации о клиенте");
                return;
            }

        }

        public void generateInfoAboutArtist(int id)
        {

        }

        //генерация отчета о выставленных на продажу картинах
        public void generateListOfWorksInGallery()
        {
            class_work_for_in_gallery_rep[] works_array = this._data_module.get_list_of_works_in_gallery();
            if (works_array[1].result == "OK")
            {

                this._rep_template = "[VRA_WORKS_REPORT]";
                OpenFileDialog ofDialog = new OpenFileDialog();
                ofDialog.Filter = "View Ridge Assistant Template files|*.vrt";
                ofDialog.Title = "Выберите файл, содержащий шаблон отчета:";
                if (ofDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    System.IO.StreamReader sr = new System.IO.StreamReader(ofDialog.FileName);
                    //MessageBox.Show(sr.ReadToEnd());
                    this._rep_template = sr.ReadToEnd();
                    sr.Close();
                }
                ofDialog.Dispose();

                this._rep.Add("<br>");

                this._rep.Add("<table align=\"center\" border=\"1\" cellpadding=\"3\" cellspacing=\"1\" bordercolor=\"lightgray\" width=\"500\">\n");

                this._rep.Add("<tr><td bgcolor=\"lightgray\">\n");
                this._rep.Add("<div align=\"center\"><b>" + "Выставленные на продажу картины" + "</b></div>\n");
                this._rep.Add("</td></tr>\n");
                this._rep.Add("</table>");
                this._rep.Add("<br>");

                this._rep.Add("<table align=\"center\" border=\"1\" cellpadding=\"3\" cellspacing=\"1\" bordercolor=\"lightgray\" width=\"500\">\n");

                this._rep.Add("<tr>\n");
                this._rep.Add("<td bgcolor=\"lightgray\" width=\"50\"><b>Код</b></td>\n");
                this._rep.Add("<td bgcolor=\"lightgray\" width=\"100\"><b>Художник</b></td>\n");
                this._rep.Add("<td bgcolor=\"lightgray\" width=\"100\"><b>Название</b></td>\n");
                this._rep.Add("<td bgcolor=\"lightgray\" width=\"50\"><b>Копия</b></td>\n");
                this._rep.Add("<td bgcolor=\"lightgray\" width=\"150\"><b>Описание</b></td>\n");
                this._rep.Add("<td bgcolor=\"lightgray\" width=\"50\"><b>Цена</b></td>\n");
                this._rep.Add("</tr>\n");

                int i = 1;
                while (works_array[i] != null)
                {


                    this._rep.Add("<tr>\n");
                    this._rep.Add("<td width=\"50\">" + works_array[i].work_id + "</td>\n");
                    this._rep.Add("<td width=\"100\">" + works_array[i].artist_name + "</td>\n");
                    this._rep.Add("<td width=\"100\">" + works_array[i].work_title + "</td>\n");
                    this._rep.Add("<td width=\"50\">" + works_array[i].work_copy + "</td>\n");
                    this._rep.Add("<td width=\"150\">" + works_array[i].work_desc + "</td>\n");
                    this._rep.Add("<td width=\"50\">" + works_array[i].trans_ask_price + "</td>\n");
                    this._rep.Add("</tr>\n");
                    
                    i++;
                }

                this._rep.Add("</table>");
                this._rep.Add("<br>");

                //MessageBox.Show("отчет готов -- отображение...");
                this.view_report();
            }
        }

        public void view_report()
        {
            this._s_rep = "";
            foreach (string str in this._rep)
            {
                this._s_rep += str;
            }

            if (this._rep_type == "WORKS_IN_GALLERY") this._s_rep = this._rep_template.Replace("[VRA_WORKS_REPORT]", this._s_rep);

            ReportViewer rep_viewer = new ReportViewer(this._s_rep);
            rep_viewer.ShowDialog();
        }
    }
}
